/*
 * @Copyright: Copyright (c) 2030 吴周海
 * @Author: wzh200x@126.com
 * @Date: 2025-10-10 15:05:19
 * @LastEditors: wzh200x@126.com
 * @LastEditTime: 2025-10-10 15:24:48
 * @FilePath: \goWebServer\goGameWebServer\internal\middlewares\unifiedResponse.go
 * @Description: 文件功能描述
 */
package middlewares

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

// UnifiedResponseMiddleware 统一响应结构中间件：
// - 执行后续中间件/处理器
// - 如果请求中显式设置了 code、message 或 data，则统一输出 {code, message, data}

// 注意：不使用 r.Response.IsExited（GoFrame v2 无此方法）
func UnifiedResponseMiddleware(r *ghttp.Request) {
	// 先执行后续处理
	r.Middleware.Next()

	// 读取可能的业务数据与状态
	var (
		code    = 0
		message = ""
		data    interface{}
	)

	// r.Get 返回 *gvar.Var；如果未设置则为 nil
	vCode := r.Get("code")
	vMsg := r.Get("message")
	vData := r.Get("data")

	// 如果显式设置了 code/message/data 中任一项，则统一输出
	if vCode != nil || vMsg != nil || vData != nil {
		if vCode != nil {
			code = vCode.Int()
		}
		if vMsg != nil {
			message = vMsg.String()
		}
		if vData != nil {
			data = vData.Val()
		}

		resp := g.Map{
			"code":    code,
			"message": message,
			"data":    data,
		}
		r.Response.WriteJson(resp)
	}
}
